<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>

    <img src="" alt="">
    <h3></h3>
    <script src=""></script>

    <script>


        // promise本身是同步的
        // 但是then是异步的


        // then方法在setTimeout 之前调用  --- 同时间


        // 同步任务
        // 异步任务
        //    微任务   then   catch   finally                     紧急任务 --- 插队
        //    宏任务   setTimeout / setInterval



        // 事件循环  eventLoop


        //  微任务先执行还是宏任务先执行？？？？


        //   script 也是一个宏任务

        //     同步
        //     检查微任务队列    看有没有需要立即执行的
        //     如果有就立即执行，
        //     如果没有就检查宏任务队列
        //         如果有也开始执行
        //               同步








        // const p = new Promise((resolve, reject) => {
        //     console.log(1);
        //     resolve(3);
        // })

        // setTimeout(() => {
        //     console.log(4);
        // })

        // p.then(res => {
        //     console.log(res);
        // })


        // console.log(2);


        // 1 2 3 4





        // const p = new Promise((resolve, reject) => {
        //     console.log(1);
        //     setTimeout(() => {
        //         resolve(3);
        //     }, 1000)
        // })

        // setTimeout(() => {
        //     console.log(4);
        // })

        // p.then(res => {
        //     console.log(res);
        // })


        // console.log(2);


        // 1 2 4 3








        const p = new Promise((resolve, reject) => {
            console.log(1);
            setTimeout(() => {
                resolve(3);
            }, 1000)
        })
        setTimeout(() => {
            setTimeout(() => {
                console.log(5)
            })
            p.then(res => {
                console.log(res);
            })

            console.log(4);
        })

        p.then(res => {
            console.log(res);
        })


        console.log(2);


        // 1 2 4 5 3 3


    </script>

</body>

</html>